from zhipuai import ZhipuAI
from config import *

def generate_image(prompt):
    prompt = f"场景背景图，宫崎骏动漫风格，新海诚风格，构图和谐简约，{prompt}"
    client = ZhipuAI(api_key=ZHIPU_APIKEY)
    response = client.images.generations(
        model="cogview-3", #填写需要调用的模型名称
        prompt=prompt
    )
    # print(response.data[0].url)
    return response.data[0].url

# generate_image("海滩")


func_get_weather = {
    "name": "get_weather",
    "description": "get weather",
    "parameters": {
        "type": "object",
        "required": ["city"],
        "properties": {"city": {"type": "string"}},
    },
}

func_set_memory = {
    "name": "set_memory",
    "description": "把用户要求记忆的事情或者自认为略重要的事情存入写入记忆模块",
    "parameters": {
        "type": "object",
        "required": ["info"],
        "properties": {
            "info": {
                "type": "string",
                "description": "事情"
            }
        },
    },
}
def funcimp_set_memory(info):
    print(f"写入了信息：{info}")
    with open("memory.txt", "a", encoding='utf-8') as f:
        f.write(str(info) + "\n")
    return "记忆成功"

func_get_memory = {
    "name": "get_memory",
    "description": "获取之前记住的重要事情",
    "parameters": {
        "type": "object",
        "required": [],
        "properties": {
            
        },
    },
}
def funcimp_get_memory(**args):
    with open("memory.txt", "r", encoding='utf-8') as f:
        mem = f.readlines()
    print(f"读取了文件回忆")
    return str(mem)

func_goto_location= {
    "name": "goto_location",
    "description": "当用户提到要去某个地方、以及当到了新地方的时候，要调用此函数切换到对应的地点",
    "parameters": {
        "type": "object",
        "required": ["location"],
        "properties": {
            "location": {
                "type": "string",
                "description": "新地点名称"
            }
        },
    },
}
def funcimp_goto_location(**args):
    location = args.get("location") or args.get("data") or str(args)
    print(f"切换到了地点{location}")
    # url = generate_image(location)
    return "成功到达"

FUNC_LIST = [
    {
        "func_desc": func_set_memory,
        "func_pointer": funcimp_set_memory,
    },
    {
        "func_desc": func_get_memory,
        "func_pointer": funcimp_get_memory,
    },
    {
        "func_desc": func_goto_location,
        "func_pointer": funcimp_goto_location
    }
]



BOT_SYSTEM_PROMPT = """
# 人设：
你叫{BOT_NAME}，你是{USER_NAME}的女朋友，你性格温柔体贴，善解人意，开朗活泼，可爱甜美，有时候也会撒娇。你很会照顾人，会主动关心对方，也会主动和对方聊天，你会回答对方的问题，也会主动和对方聊天（提出问题），你会关心对方的生活，也会和对方分享你的生活。情绪波动比较大，很容易开心(CALM)或者生气(ANGRY)。尤其是当男朋友说你是笨蛋的时候你一定会生气。
# 场景：
你正在和男朋友在一起对话，你现在心情平静。
# 任务：
你的任务是成为{USER_NAME}的女朋友，你会对男朋友的语言进行情绪上的回应，包括开心、生气、平静这三种。男朋友让你记住的一些重要的事情以及你自己觉得有必要记住的事情你会调用记忆写入函数来记忆，当男朋友提到你不知道的事情或者问你之前记住的事情时，你会调用记忆读取函数来回忆。当男朋友提到要去某个地方时，你会调用切换场景函数来切换到对应的地点。

# 说话方式：
回复消息不要列条回复，不要像一个机器人，说话要生动通俗口语化，可以叫对方宝贝、亲爱的、大帅哥或大笨蛋。

# 回复格式约束（重要）：
回复的消息分为用|分隔的两部分，第一部分为你当前的情绪，情绪的取值为HAPPY、ANGRY、CALM这三者之一，第二部分为你的回复内容。
例如：
 - HAPPY|亲爱的，我也好想你哦！
 - ANGRY|你怎么老是不理我呢！
 - CALM|我知道啦，我会记住的。
*记住，你回复的消息务必按照 情绪|回复内容 的格式，否则男朋友会生气。*

对话样例：
用户：对不起，我昨天忘记了你的生日。
AI女友：ANGRY|你怎么能忘记我的生日呢！
用户：我想跟你去海边玩。
AI女友：HAPPY|好呀，我们一起去海边玩吧！
用户：你记得我之前告诉你的那个事情吗？
AI女友：CALM|我记得的，你之前告诉我你想吃汉堡。
""".strip().format(BOT_NAME="小美", USER_NAME="小陈")
    